在预览 (Preview) 中分析您的应用程序
在预览 (Preview) 中点击
以分析应用程序的性能和内部结构。
除了 预览 (Preview) 分析 (Analyze) 模式外,Kanzi 还其他方式来帮助您分析应用程序。请参阅 排除应用程序的性能问题 和 最佳实践。
在 分析 (Analyze) 模式下,使用 主菜单或右键点击
选择当 在 分析 (Analyze) 模式下要分析的项类型:
- 选择 (Selection) 突出显示选定的节点。请参阅 在 预览 (Preview) 中编辑您的应用程序。
- 调试对象 (Debug objects) 显示可视化节点,如光源、摄像机和布局节点。
- 分配的布局 (Allocated layout) 显示分配给布局下的项的空间边框。请参阅 布局控制节点。
- 实际布局 (Actual layout) 显示布局下的项使用的空间边框。请参阅 布局控制节点。
- 网格单元格 (Grid cells) 显示 2D 网格布局 (Grid layout 2D) 节点的单元格。请参阅 使用网格布局 (Grid Layout) 节点。
- 标尺和参考线 (Rulers and guides) 显示可帮助您将元素定位到应用程序中的标尺和参考线。请参阅 使用标尺和参考线。
- 2D 节点边框 (Borders of 2D nodes) 画出了带条纹的 2D 节点的边框。
- 3D 网格 (3D Grid) 显示 场景 (Scene) 节点中的地面平面网格。
- 包围体 (Bounding volumes) 显示封闭盒中的网格。
- 帧缓冲区对象 (Framebuffer objects) 用渲染到纹理中并引起帧缓冲区对象切换的半透明黄色移动条纹标记节点。请参阅 渲染最佳实践。
- 未绘图区域 (Undrawn area) 显示应用程序屏幕之外的区域的更新以及内容未渲染的区域。
- 透明度 (Transparency) 用透明的蓝色移动条纹标记透明节点。请参阅配置节点以进行有效渲染。
- 过度绘制 (Overdraw) visualization indicates areas where Kanzi renders multiple times to the same pixel. Lighter green color indicates higher amount of overdraw. See 使用排序过滤器 (Sorting Filter)防止过度绘制.
- 性能 HUD (Performance HUD) 显示了 Kanzi 应用程序在过去 500 帧中的整体性能指标,包括:
- 帧持续期间 (Frame Duration (ms)) 以毫秒为单位显示渲染最后一帧的时间及平均、最高和最低耗时。 帧持续期间 (Frame Duration (ms)) 图中的最高值显示最长时间,最低值是最近 500 帧期间渲染一帧所用的平均时间。
信息可用于识别 Kanzi 应用程序中的性能瓶颈。例如,您可以通过在多个帧上分布渲染来找出如何提高应用程序的性能。请参阅在多个帧上分布渲染。
- 每秒帧数 (Frames Per Second) 显示每秒渲染的帧数。
- 动画持续时间 (Animation Duration (μs)) 以微秒为单位显示执行应用程序中最后一帧的所有动画所需的时间及平均、最高和最低耗时。
- 批处理计数 (Batch Count) 显示执行了多少个单独的绘图调用(
glDrawElements和glDrawArrays)。
您可以通过 Kanzi Engine API 访问批处理计数,具体方法为调用getBatchCount()。
批处理计数 (Batch Count) 图中的最高值显示最近 500 帧期间的最高批处理数,最低值是最后一帧中的批处理数。
- 三角形计数 (Triangle Count) 显示在一帧中总共绘制了多少个单独的三角形。
您可以访问 Kanzi Engine API 中的三角形计数,方法是调用getTriangleCount()。 - 纹理切换 (Texture Switches) 显示新纹理绑定到 GPU 的次数。
您可以访问 Kanzi Engine API 中的纹理切换计数,方法是调用getTextureSwitchCount()。 - FBO 切换 (FBO Switches) 显示有多少帧缓冲区对象绑定到 GPU。请参阅渲染最佳实践。
您可以访问 Kanzi Engine API 中的缓冲区切换计数,方法是调用getFramebufferSwitchCount()。 - 着色器 (Shader) 显示新的着色器绑定到新应用的批处理的次数,以及为最后一帧发送了多少个着色器 uniform。请参阅减少着色器切换。
您可以访问 Kanzi Engine API 中的着色器切换计数,方法是调用getShaderSwitchCount()。
您可以访问 Kanzi Engine API 中发送的 uniform 消息,方法是调用getUniformSendCount()。 - 缓冲区切换 (Buffer Switches) 显示有多少顶点、索引和 uniform 缓冲区对象绑定到 GPU。
您可以访问 Kanzi Engine API 中的缓冲区切换计数,方法是调用getBufferSwitchCount()。 - 缓冲区/纹理数据更新 (Buffer/texture data updates) 显示新的顶点缓冲区或纹理数据上传到 GPU 的次数。如果访问相同的缓冲区进行读写操作,这些权重操作可能会导致 GPU 执行延迟。理想值是 0。
例如,当文本字形缓存需要频繁更新时,该值可能增加。在这种情况下,要减少字形缓存更新,应减少文本块 (Text Block) 节点中的字号 (Font Size) 属性值。
您可以访问 Kanzi Engine API 中的信息,方法是调用getHeavyweightCallCount()。 - 查看摄像机 (View camera) 显示用于在应用程序中显示场景的 摄像机 (Camera) 节点名称。
- 资源内存消耗 (Resource memory consumption) 显示您的 Kanzi 应用程序使用的本地 GPU 内存 (VRAM) 和非本地 GPU 内存 (RAM) 的估计量。
性能 HUD (Performance HUD) 在 Kanzi Studio 预览 (Preview) 中显示的值与在目标设备上运行 Kanzi 应用程序时显示的值不同,因为 Kanzi Studio 在内存中加载并保持应用程序的所有资源。 - 计时器订阅数 显示
KzuMessageDispatcher中已注册的计时器处理程序数量。计时器处理程序数量过多会降低您应用程序的性能。
您可以通过调用kzuMessageDispatcherGetTimerSubscriptionCount()函数,获取 Kanzi Engine API 中计时器的订阅数量。 - 重复任务 显示
KzuTaskScheduler中的重复任务数量。大量重复任务会降低您应用程序的性能。
您可以通过调用kzuTaskSchedulerGetRecurringTaskCount()函数,获取 Kanzi Engine API 中重复任务的数量。 - 动画 显示您 Kanzi 应用程序中活动的和所有的动画数量。
您可以通过以下方式,查看 Kanzi Engine API 中的动画数量:- 要获取活动动画的数量,请使用
getActiveTimelinePlaybackCount()函数。 - 要获取所有动画的数量,请使用
getTimelinePlaybackCount()。
- 要获取活动动画的数量,请使用
- 帧持续期间 (Frame Duration (ms)) 以毫秒为单位显示渲染最后一帧的时间及平均、最高和最低耗时。 帧持续期间 (Frame Duration (ms)) 图中的最高值显示最长时间,最低值是最近 500 帧期间渲染一帧所用的平均时间。
- 帧时间 HUD (Frame time HUD) 显示了 Kanzi 应用程序在过去 500 帧中的帧时间指标:
- 帧持续期间 (Frame Duration (ms)) 以毫秒为单位显示渲染最后一帧的时间及平均、最高和最低耗时。
- 每秒帧数 (Frames Per Second) 显示每秒渲染的帧数。
- 动画持续时间 (Animation Duration (μs)) 以微秒为单位显示执行应用程序中最后一帧的所有动画所需的时间及平均、最高和最低耗时。
要自定义 Kanzi Studio 在 分析 (Analyze) 模式下如何显示不同类型的项,选择 > 用户首选项 (User Preferences),并在 预览 (Preview) 选项卡中设置项的颜色和线条粗细。
预览 (Preview) 日志文件
Kanzi Studio 将 预览 (Preview) 日志消息存储在 %USERPROFILE%\AppData\Local\Temp\KanziStudioLogs\KanziPreview.log 文件中。
要设置日志记录的详细程度,在 <KanziInstallation>\Studio\Bin\KanziPreview.exe.config 文件中设置 logLevel 键的值:
NORMAL设置Kanzi Studio 记录常规 Kanzi Studio 预览 (Preview) 流程,包括错误和异常。VERBOSE设置Kanzi Studio 以毫秒级别的精度记录 Kanzi Studio 和预览 (Preview) 之间的低级别通信。
当您将日志级别设为VERBOSE,大量日志消息会降低 Kanzi Studio 性能。NONE将Kanzi Studio 设为不记录任何消息到KanziPreview.log 文件。
例如,要记录 Kanzi Studio 和预览 (Preview) 之间的所有通信,在文本编辑器中打开KanziPreview.exe.config 文件并设置:
<add key="logLevel" value="VERBOSE"/>
要将更改应用到 KanziPreview.exe.config,保存 KanziPreview.exe.config 文件并按下 Ctrl F8 重新启动预览 (Preview)。请参阅控制预览 (Preview)。
每次重新启动预览 (Preview) 时,Kanzi Studio 都会重写KanziPreview.log 文件的内容。